package kgc.crm.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.nio.charset.Charset;
import java.util.List;
/*
* 当我们的响应数据是string类型是，
* 框架自动识别到消息类型(MediaType)，
* 会采用StringHttpMessageConverter进行消息转换
* ，但是StringHttpMessageConverter默认的字符集是ISO-8859-1，
* 这就导致了响应头中Content-Type为"xxx;charset=ISO-8859-1"。
* 所以导致中文乱码*/
@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
    @Bean
    public HttpMessageConverter<String> responseBodyConverter() {
        // 框架默认的StringHttpMessageConverter编码是ISO-8859-1，@Response注解当接口返回的是字符串时会中文乱码
        return new StringHttpMessageConverter(Charset.forName("UTF-8"));
    }
    /**
     * 消息转换器
     * @param converters
     */
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        super.extendMessageConverters(converters);
        // 请注意顺序，因为其实底层就是用list进行存储的所有可以通过指定下标来指定顺序
        // 目前这种写法可以解决问题，但是因为我们指定的StringHttpMessageConverter
        // 框架也指定了StringHttpMessageConverter，所有我们要将自己的排在前面，否者依然无法使用自定义的消息转换器
        converters.add(0, responseBodyConverter());
    }
}